#ifndef CLIONQT5WORK_IMAGELABEL_H_D5
#define CLIONQT5WORK_IMAGELABEL_H_D5
// Qt 基础类
#include <QLabel>               // 用于显示图像
#include <QPixmap>              // 存储图像数据
#include <QMouseEvent>          // 鼠标事件处理
#include <QContextMenuEvent>    // 右键菜单事件
#include <QPaintEvent>          // 绘图事件
#include <QPoint>               // 坐标点
#include <vector>               // C++ 标准容器 vector

// ImageLabel 类继承自 QLabel，用于支持图像显示、点选标注、多边形绘制、矩形选框、右键菜单等功能
class ImageLabel : public QLabel {
Q_OBJECT  // Qt 宏：支持信号与槽机制

public:
    explicit ImageLabel(QWidget *parent = nullptr); // 构造函数
    ~ImageLabel() override;
    // 图像设置与变换
    void setOriginalPixmap(const QPixmap &pixmap);     //
    void clearPoints();
     // 点数据操作
    const std::vector<QPoint>& getPoints() const;      // 获取用户标注点

protected:
    void mousePressEvent(QMouseEvent *ev) override;
    void mouseMoveEvent(QMouseEvent *ev) override;
    void paintEvent(QPaintEvent *event) override;

private:
    // 原始与缩放图像（双图支持）
    QPixmap originalPixmap;
    QPixmap scaledPixmap;

     // 点集与状态标志
    std::vector<QPoint> points;         // 用户标注点集
    bool closed = false;                // 是否闭合多边形
    QPoint currentPos;                  // 当前鼠标位置

    // 坐标转换（控件 <-> 图像）
    QPoint mapToImage(const QPoint& widgetPos) const;   // 控件坐标 → 图像坐标
    QPoint mapToWidget(const QPoint& imgPt) const;      // 图像坐标 → 控件坐标
};

#endif // CLIONQT5WORK_IMAGELABEL_H_D5
